<?php

namespace App\Http\Controllers\GarbageCollect;

use App\Models\Garbage\GarbageDissminateNews;
use App\Models\Garbage\GarbageGoodKind;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Validator;

/**
 * @group 垃圾分类->宣传教育->新闻消息
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */


class GarbageDissminateNewsController extends Controller
{
    /**
     * 信息展
     * @queryParam title 新闻标题.
     * @queryParam text 新闻内容.
     * @queryParam user_id 发布用户id号.
     * @queryParam up_nums 点赞数量.
     * @queryParam read_nums 阅读数量.
     * @queryParam status 状态 1.草稿 2.已发布 3.已禁用
     * @queryParam is_use 是否启用.
     * @queryParam time 文章创建时间
     * @bodyParam start_time datetime optional 筛选开始时间
     * @bodyParam end_time datetime optional 筛选结束时间
     * @bodyParam search string optional 搜索标题(模糊)
     */
    public function index(Request $request){
        $query =GarbageDissminateNews::with('user')->where(
            function ($q) use ($request){
                $request->has('start_time') && $q->where('time','>',$request->get('start_time'));
                $request->has('end_time') && $q->where('time','<',$request->get('end_time'));
                $request->has('search') && $q->where('title','like',"%{$request->get('search')}%");
            }
        )->where('status','2');
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);
    }


    /**
     * 信息添加
     *
     * @queryParam title 新闻标题.
     * @queryParam content 新闻内容.
     * @queryParam user_id 发布用户id号.
     * @queryParam up_nums 点赞数量.
     * @queryParam read_nums 阅读数量.
     * @queryParam status 状态 1.草稿 2.已发布 3.已禁用
     * @queryParam is_use 是否启用.
     * @queryParam time 文章创建时间
     * @bodyParam title string required 新闻标题.
     * @bodyParam content text required 新闻内容.
     * @bodyParam user_id int optional 发布用户id号. 外键 用户信息
     * @bodyParam up_nums int optional 点赞数量默认0.
     * @bodyParam read_nums int optional 阅读数量默认0.
     * @bodyParam status int required 状态 1 草稿 2 已发布 3 已禁用等.
     * @bodyParam is_use int optional 是否启用.
     * @bodyParam time datetime optional 创建时间.
     */

    public function store(Request $request)
    {
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        try {
            $data = GarbageDissminateNews::create($request->all());
            return response()->json(encodeMsg($data,201), 201);
        } catch (QueryException $e) {
            return response()->json(encodeMsg(["message" => $e->getMessage()],500), 500);
        }
    }

    /**
     * 单个信息展示
     * @queryParam title 新闻标题.
     * @queryParam text 新闻内容.
     * @queryParam user_id 发布用户id号.
     * @queryParam up_nums 点赞数量.
     * @queryParam read_nums 阅读数量.
     * @queryParam status 状态 1.草稿 2.已发布 3.已禁用
     * @queryParam is_use 是否启用.
     * @queryParam time 文章创建时间
     */
    public function show($pk)
    {
        $data = GarbageDissminateNews::with('user')->find($pk);
        if ($data == []) {
            return response()->json(encodeMsg(["message" => "没有该新闻类型信息"],404), 404);
        } else {
            return response()->json(encodeMsg($data,200), 200);
        }
    }

    /**
     * 信息更新
     * @queryParam title 新闻标题.
     * @queryParam user_id 发布用户id号.
     * @queryParam content 新闻内容.
     * @queryParam up_nums 点赞数量.
     * @queryParam read_nums 阅读数量.
     * @queryParam status 状态 1.草稿 2.已发布 3.已禁用
     * @queryParam is_use 是否启用.
     * @queryParam time 创建时间
     *
     *
     * @bodyParam title string optional 新闻标题.
     * @bodyParam user_id int optional 发布用户id号.
     * @bodyParam content text optional 新闻内容.
     * @bodyParam up_nums int optional 点赞数量默认0.
     * @bodyParam read_nums int optional 阅读数量默认0.
     * @bodyParam status int optional 状态 1.草稿 2.已发布 3.已禁用.
     * @bodyParam is_use int optional 是否启用.
     * @bodyParam time datetime required 创建时间.
     *
     */
    public function update(Request $request, $pk){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        $data = GarbageDissminateNews::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该新闻信息"],404),404);
        }
        try {
            $data->update($request->all());
            return response()->json(encodeMsg($data,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"服务器错误"],500),500);
        }
    }

    /**
     * 信息删除
     */
    public function destroy($pk){
        $data = GarbageDissminateNews::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该新闻信息"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}